package com.mastercard.assets.web.struts.forms;

import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

import com.mastercard.assets.MasterCardException;
import com.mastercard.assets.jpa.TblFlujoAutorizacion;
import com.mastercard.assets.jpa.TblNivel;
import com.mastercard.assets.jpa.TblRole;
import com.mastercard.assets.jpa.TblUsuario;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.util.to.UserLogin;
import java.util.ArrayList;
import java.util.List;

public class CatalogoNuevoItemForm
        extends ActionForm {

    private int catalogoId;
    private int regId;
    private int operation;
    private String campo1;
    private String campo2;
    private String campo3;
    private String campo4;
    private String campo5;
    private String campo6;
    private int campoInt1;
    private int campoInt2;
    private int campoInt3;
    private int[] campoIntArr1;
    private int[] campoIntArr2;
    private int[][] campoIntDoubleArr1 = new int[10][10];
    private int[][] campoIntDoubleArr2;
    private HashMap< String, int[]> campoHashMap1;

    public String getCampo4() {
        return campo4;
    }

    public void setCampo4(String campo4) {
        this.campo4 = campo4;
    }

    public String getCampo5() {
        return campo5;
    }

    public void setCampo5(String campo5) {
        this.campo5 = campo5;
    }

    public int getCampoInt1() {
        return campoInt1;
    }

    public void setCampoInt1(int campoInt1) {
        this.campoInt1 = campoInt1;
    }

    public int getCampoInt2() {
        return campoInt2;
    }

    public void setCampoInt2(int campoInt2) {
        this.campoInt2 = campoInt2;
    }

    public int getCampoInt3() {
        return campoInt3;
    }

    public void setCampoInt3(int campoInt3) {
        this.campoInt3 = campoInt3;
    }

    public int getRegId() {
        return regId;
    }

    public void setRegId(int regId) {
        this.regId = regId;
    }

    public int getOperation() {
        return operation;
    }

    public void setOperation(int operation) {
        this.operation = operation;
    }

    public int getCatalogoId() {
        return catalogoId;
    }

    public void setCatalogoId(int catalogoId) {
        this.catalogoId = catalogoId;
    }

    public String getCampo1() {
        return campo1;
    }

    public void setCampo1(String campo1) {
        this.campo1 = campo1;
    }

    public String getCampo2() {
        return campo2;
    }

    public void setCampo2(String campo2) {
        this.campo2 = campo2;
    }

    public String getCampo3() {
        return campo3;
    }

    public void setCampo3(String campo3) {
        this.campo3 = campo3;
    }

    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
//		System.out.println( "Entra a validar " + catalogoId ) ;

        ActionErrors errors = new ActionErrors();

        switch (catalogoId) {
            case MCUtil.CATALOGO_ID_FLUJOS_AUT:
                if (operation == 1) {
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldName"));
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/FlujosAutAdd.jsp");
                    }
                    if( campoInt1 == 0 ) {
                        errors.add("Prioridad", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.flujoAutorizacion.nuevo.PrioridadVacia"));
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/FlujosAutAdd.jsp");
                    }
                    boolean prioridad = MasterCardDAO.getFlowByPriority( campoInt1 ) ;
                    if( prioridad == true ) {
                        errors.add("Prioridad", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.flujoAutorizacion.nuevo.ErrorPrioridad"));
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/FlujosAutAdd.jsp");
                    }
                }else if (operation == 2) {
                    if ( campoInt1 == 0 ) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldName"));
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/FlujosAutAdd.jsp");
                    }
                }else if (operation == 3) {
                    if (campoInt2 == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldName"));
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/FlujosAutAdd.jsp");
                    }                    
                }else if( operation == 4 ) {
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldName"));
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/FlujosAutAdd.jsp");
                    }
                    if( campoInt1 == 0 ) {
                        errors.add("Prioridad", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.flujoAutorizacion.nuevo.PrioridadVacia"));
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/FlujosAutAdd.jsp");
                    }
                    List< TblFlujoAutorizacion > tblFlujoAutorizacion = MasterCardDAO.getFlowByPriority2( campoInt1 ) ;
                    if( !tblFlujoAutorizacion.isEmpty( ) ) {
                        for( TblFlujoAutorizacion Tblfa : tblFlujoAutorizacion ) {
                            if( ( campoInt1 == Tblfa.getPrioridad( ) ) && ( campoInt3 != Tblfa.getCveFlujoAut() ) ) {
                                errors.add("Prioridad", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.flujoAutorizacion.nuevo.ErrorPrioridad"));
                                ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/FlujosAutAdd.jsp");
                                break ;
                            }
                        }
                    }
                    
                }
            break;
            case MCUtil.CATALOGO_ID_PAISES:
                if (operation == 1) {
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldName"));
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/PaisesCrear.jsp");
                    }

                    if (campo2 == null || campo2.trim().length() == 0) {
                        errors.add("ClaveVacia", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldKey"));
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/PaisesCrear.jsp");
                    }
                }else if (operation == 2) {
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldName"));
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/PaisesEditar.jsp");
                    }
                    if (campo3 == null || campo3.trim().length() == 0) {
                        errors.add("ClaveVacia", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldKey"));
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/PaisesEditar.jsp");
                    }
                    if (campo2 == null || campo2.trim().length() == 0) {
                        errors.add("cvePais", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldcve"));
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/PaisesEditar.jsp");
                    }
                }
            break;    
            case MCUtil.CATALOGO_ID_TIPO_CUENTA:

                // en caso de creacion
                if (operation == 1) {
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldName"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearTipoCuenta.jsp");
                    }

                    // verifica si ya existe el campo con dicho nombre
                    if (MasterCardDAO.existActiveCountTypeByName(campo1)) {
                        errors.add("NombreExistente", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.AcountTypeWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearTipoCuenta.jsp");
                    }

                    // la descripcion puede estar vacia
                    if (campo2 == null) {
                        campo2 = "";
                    }
                } else if (operation == 3) {
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldName"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarTipoCuenta.jsp");
                    }

                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveCountTypeByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarTipoCuenta.jsp");
                    }


                    // la descripcion puede estar vacia
                    if (campo2 == null) {
                        campo2 = "";
                    }
                }

                break;

            // tipo de cuenta
            case MCUtil.CATALOGO_ID_CUENTA:

                    if ( operation == 1 ){
                        // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldName"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearCuenta.jsp");
                    }                    
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveCountByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.cuenta.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearCuenta.jsp");
                    }
                    
                    }
                    else if (operation == 3) {
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveCountByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.cuenta.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarCuenta.jsp");
                    }
                }

                break;
                
                // bps
            case MCUtil.CATALOGO_ID_BPS:
                
                if ( operation == 1 ){
                    // los campos no deben ser nulos
                    if ( campo1 == null || campo1.trim().length() == 0 ) {
                        errors.add( "Domestic Purchase BpsVacio", new  ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldDBps") );
                        
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearBps.jsp");
                    }
                    
                    if ( campo2 == null || campo2.trim().length() == 0 ) {
                        errors.add( "Percent Domestic", new  ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldPercent") );
                        
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearBps.jsp");
                    }
                    
                    if ( campo3 == null || campo3.trim().length() == 0 ) {
                        errors.add( "Intl Bps", new  ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldIntlBps") );
                        
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearBps.jsp");
                    }
                    
                    if ( campo4 == null || campo4.trim().length() == 0 ) {
                        errors.add( "Card Bps", new  ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldCardBps") );
                        
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearBps.jsp");
                    }
                    
                    if (MasterCardDAO.existActiveBpsByCountAndProduct(campoInt1, campoInt2)) {
                        errors.add("Registro Existe", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.cuenta.editar.RegisterWithCountAndProductAlreadyExist" ));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearBps.jsp");
                    }
                    
                }
                
                break ;

            // tipo de cuenta
            case MCUtil.CATALOGO_ID_CATEGORY:

                if (operation == 3) {
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveCategoryByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarCategoria.jsp");
                    }
                    if ( campo1.length() == 0 ){
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed", campo1));
                        
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarCategoria.jsp");
                    }
                    
                }
                if ( operation == 1 ) {
                    
                    if ( campo1.length() == 0 ){
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed", campo1));
                        
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearCategoria.jsp");
                    }
                    else
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveCategoryByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearCategoria.jsp");
                    }
                }

                break;

            // tipo de cuenta
            case MCUtil.CATALOGO_ID_SUBCATEGORY:

                if (operation == 3) {
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveSubcategoryByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.subcategoria.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarSubcategoria.jsp");
                    }
                    
                    if ( campo1.length() == 0 ){
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed", campo1));
                        
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarSubcategoria.jsp");
                    }
                }
                if ( operation == 1 ) {
                    if ( campo1.length() == 0 ){
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed", campo1));
                        
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearSubcategoria.jsp");
                    }
                   
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveSubcategoryByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.subcategoria.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearSubcategoria.jsp");
                    }
                    
                }

                break;

            // tipo de cuenta
            case MCUtil.CATALOGO_ID_SEGMENTO:

                if ( operation == 1 ){
                    // en caso de vacio
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("UserWithoutLogin", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearSegmento.jsp");
                    }
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveSegmentByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.segmento.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearSegmento.jsp");
                    }
                    
                }
                if (operation == 3) {
                    // en caso de vacio
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("UserWithoutLogin", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarSegmento.jsp");
                    }
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveSegmentByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.segmento.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarSegmento.jsp");
                    }
                }

                break;

            // tipo de cuenta
            case MCUtil.CATALOGO_ID_PRODUCT_TYPE:

                if ( operation == 1 ){
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearTipoProducto.jsp");
                    }
                    // verifica si ya existe otro con el mismo nombre
                    // a peticion del cliente se pueden crear productos con el mismo
                    if (MasterCardDAO.existActiveProductTypeByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipoproducto.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarTipoProducto.jsp");
                    }
                }
                if (operation == 3) {
                    
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarTipoProducto.jsp");
                    }
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveProductTypeByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipoproducto.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarTipoProducto.jsp");
                    }
                }

                break;

            // tipo de cuenta
            case MCUtil.CATALOGO_ID_PRODUCT:

                if ( operation == 1 ) {
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearProducto.jsp");
                    }
                    // verifica si ya existe otro con el mismo nombre
                    // a peticion del cliente se pueden crear productos con el mismo
//                    if (MasterCardDAO.existActiveProductByNameWithoutId(campo1, regId)) {
//                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.producto.editar.RegisterWithNameAlreadyExist", campo1));
//
//                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearProducto.jsp");
//                    }
                }
                if (operation == 3) {
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarProducto.jsp");
                    }
                    // verifica si ya existe otro con el mismo nombre
                    // a peticion del cliente se pueden crear productos con el mismo
//                    if (MasterCardDAO.existActiveProductByNameWithoutId(campo1, regId)) {
//                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.producto.editar.RegisterWithNameAlreadyExist", campo1));
//
//                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarProducto.jsp");
//                    }
                }

                break;

            // tipo de cuenta
            case MCUtil.CATALOGO_ID_CAMPAIGN_TYPE:

                if ( operation == 1  ) {
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearTipoCampana.jsp");
                    }
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveCampaignTypeByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocampana.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearTipoCampana.jsp");
                    }
                    
                }
                if (operation == 3) {
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarTipoCampana.jsp");
                    }
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveCampaignTypeByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocampana.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarTipoCampana.jsp");
                    }
                }

                break;

            // tipo de cuenta
            case MCUtil.CATALOGO_ID_AGENCY:

                if ( operation == 1 ) {
                        // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearAgencia.jsp");
                    }
                     // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveAgencyByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.agencia.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearAgencia.jsp");
                    }   
                    }
                if (operation == 3) {                    
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarAgencia.jsp");
                    }
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveAgencyByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.agencia.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarAgencia.jsp");
                    }
                }

                break;

            // tipo de cuenta
            case MCUtil.CATALOGO_ID_SERVICE:

                if ( operation == 1 ) {
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearServicio.jsp");
                    }
                            // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveServiceByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.servicio.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearServicio.jsp");
                    }
                }
                if (operation == 3) {
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarServicio.jsp");
                    }
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveServiceByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.servicio.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarServicio.jsp");
                    }
                }

                break;

            // tipo de cuenta
            case MCUtil.CATALOGO_ID_ROLE:

                if ( operation == 1 ) {
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearRol.jsp");
                    }
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveRoleByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.role.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearRol.jsp");
                    }
                }
                if (operation == 3) {
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarRol.jsp");
                    }
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveRoleByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.role.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarRol.jsp");
                    }
                } else if (operation == 4) {
//                                    verifica que no este vacio el rol
                    if (campoIntArr1 == null || campoIntArr1.length == 0) {
                        errors.add("SinSeleccion", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.role.editar.UnselectedRole", campo1));

                        // obtiene los roles del usuario
                        List< TblRole> userRoles = null;

                        // adquiere el usuario
                        TblUsuario usuario = MasterCardDAO.findUserById(regId);

                        userRoles = usuario.getTblRoles();

                        // en caso de null
                        if (userRoles == null) {
                            userRoles = new ArrayList< TblRole>();
                        }

                        // toma los usuarios del sistema
                        List< TblRole> appActiveRoles = MasterCardDAO.getAllActiveRoles();

                        // le quita unos a otros
                        appActiveRoles.removeAll(userRoles);
                        request.setAttribute("OtherRoles", appActiveRoles);

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/AgregarRolAUsuario.jsp");
                    }


                }

                break;

            // tipo de cuenta
            case MCUtil.CATALOGO_ID_LEVEL:

                if ( operation == 1 ) {
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearNivel.jsp");
                    }
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveLevelByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.nivel.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearNivel.jsp");
                    }
                }
                if (operation == 3) {
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.categoria.editar.UnNamed"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarNivel.jsp");
                    }
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveLevelByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.nivel.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarNivel.jsp");
                    }
                } else if (operation == 7) {
                   
                        //                                    verifica que no este vacio el nivel
                        if (campoIntArr1 == null || campoIntArr1.length == 0) {
                try {
                    errors.add("SinSeleccion", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.nivel.editar.UnselectedLevel", campo1));
                    
                    // obtiene los roles del usuario
                List< TblNivel> userLevels = null;

                // adquiere el usuario
                TblUsuario usuario = MasterCardDAO.findUserById(regId);

                // toma los roles
                userLevels = usuario.getTblNivels();

                // en caso de null
                if (userLevels == null) {
                    userLevels = new ArrayList< TblNivel>();
                }

                // toma los usuarios del sistema
                List< TblNivel> appActiveLevels = MasterCardDAO.getAllActiveLevels();

                // le quita unos a otros
                appActiveLevels.removeAll(userLevels);

                request.setAttribute("OtherLevels", appActiveLevels);

                ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/AgregarNivelAUsuario.jsp");
                } catch (MasterCardException ex) {
                    Logger.getLogger(CatalogoNuevoItemForm.class.getName()).log(Level.SEVERE, null, ex);
                }
                        }               

                }

                break;

            // tipo de cuenta
            case MCUtil.CATALOGO_ID_USUARIOS:

                // en caso de que sea operacion 1
                if (operation == 1) {
                    // revisa el numero de roles
                    // en caso de vacio
                    if (campoIntArr1 == null || campoIntArr1.length == 0) {
                        errors.add("UserWithoutRoles", new ActionMessage("com.mastercard.assets.web.errors.dao.login.ChoosAtLeastOneRol", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearUsuario.jsp");
                    }

                    // en caso de vacio
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("UserWithoutLogin", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.usuario.nuevo.dao.EmptyFieldLogin"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearUsuario.jsp");
                    }

                    // en caso de vacio
                    if (campo4 == null || campo4.trim().length() == 0) {
                        errors.add("UserWithoutPassword", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.usuario.nuevo.dao.EmptyFieldPass"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearUsuario.jsp");
                    }

                    // en caso de vacio
                    if (campo3 == null || campo3.trim().length() == 0) {
                        errors.add("UserWithoutName", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.usuario.nuevo.dao.EmptyFieldName"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearUsuario.jsp");
                    }

                    // en caso de vacio
                    if (campo2 == null || campo2.trim().length() == 0) {
                        errors.add("UserWithoutEmail", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.usuario.nuevo.dao.EmptyFieldEmail"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearUsuario.jsp");
                    }else if ( campo2.length( ) < 6 ){
                        errors.add("UserWithoutEmail", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.usuario.nuevo.dao.LengthFieldEmail"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearUsuario.jsp");
                    }
                    else if ( campo2.indexOf( '@' ) == -1 || campo2.indexOf( '.' ) == -1 ){
                        errors.add("UserWithoutEmail", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.usuario.nuevo.dao.FailFieldEmail"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearUsuario.jsp");
                    }
                    boolean mt  = MasterCardDAO.validMailUser( campo2 ) ;
                    if( mt==false){
                            errors.add("UserWithoutEmail", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.usuario.nuevo.dao.FailFieldEmailexiste"));
                            ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearUsuario.jsp");
                    }
                    
                    
                }

                if (operation == 5) {
                    // en caso de null o vacio
                    if (campoIntArr1 == null || campoIntArr1.length == 0) {
                        errors.add("UserWithoutLevels", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.usuario.dao.UserWithoutLevels"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearUsuarioMostrarNiveles.jsp");
                    }

                }

                if (operation == 3) {
                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveUserByLoginWithoutId(campo1, regId)) {
                        TblUsuario res = MasterCardDAO.findUserById(regId);

                        request.setAttribute("UserRoles", res.getTblRoles());
                        request.setAttribute("UserLevels", res.getTblNivels());

                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.usuario.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarUsuario.jsp");
                    }
                }
                
                if ( operation == 77 ) {
                    //valida la edicion de usuario hecha por el usuario
                    if ( campo1 == null || campo1.length() == 0 ){
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.usuario.nuevo.dao.EmptyFieldLogin"));
                        
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarDatosUsuarioIn.jsp");
                    }
                    if ( campo4 == null || campo4.length() == 0 || campo5 == null || campo5.length() == 0 ) {
                        errors.add("UserWithoutPassword", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.usuario.nuevo.dao.EmptyFieldPass"));
                        
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarDatosUsuarioIn.jsp");                        
                    }
                    if ( !campo4.equals(campo5) ) {
                        errors.add("UserWithoutPassword", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.usuario.nuevo.dao.NoEqualsFieldPass"));
                        
                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarDatosUsuarioIn.jsp");
                    }
                    
                }

                break;

            case MCUtil.CATALOGO_ID_TIPO_CUENTA_REAL:

                // en caso de creacion
                if (operation == 1) {
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldName"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearTipoCuentaReal.jsp");
                    }

                    // verifica si ya existe el campo con dicho nombre
                    if (MasterCardDAO.existActiveRealCountTypeByName(campo1)) {
                        errors.add("NombreExistente", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.RealAcountTypeWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/CrearTipoCuentaReal.jsp");
                    }

                    // la descripcion puede estar vacia
                    if (campo2 == null) {
                        campo2 = "";
                    }
                } else if (operation == 3) {
                    // primer campo no puede ser null
                    if (campo1 == null || campo1.trim().length() == 0) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuenta.nuevo.EmptyFieldName"));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarTipoCuentaReal.jsp");
                    }

                    // verifica si ya existe otro con el mismo nombre
                    if (MasterCardDAO.existActiveRealCountTypeByNameWithoutId(campo1, regId)) {
                        errors.add("NombreVacio", new ActionMessage("com.mastercard.assets.web.errors.modules.catalogos.tipocuentareal.editar.RegisterWithNameAlreadyExist", campo1));

                        ((UserLogin) request.getSession().getAttribute("UserLogin")).setNextWorkArea("/WEB-INF/pages/WorkArea/EditarTipoCuentaReal.jsp");
                    }

                    // la descripcion puede estar vacia
                    if (campo2 == null) {
                        campo2 = "";
                    }
                }

                break;

        }

        MasterCardDAO.closeEntityManager( ) ;
        return errors;
    }

    public int[] getCampoIntArr1() {
        return campoIntArr1;
    }

    public void setCampoIntArr1(int[] campoIntArr1) {
        this.campoIntArr1 = campoIntArr1;
    }

    public int[] getCampoIntArr2() {
        return campoIntArr2;
    }

    public void setCampoIntArr2(int[] campoIntArr2) {
        this.campoIntArr2 = campoIntArr2;
    }

    public int[][] getCampoIntDoubleArr1() {
        return campoIntDoubleArr1;
    }

    public void setCampoIntDoubleArr1(int[][] campoIntDoubleArr1) {
        this.campoIntDoubleArr1 = campoIntDoubleArr1;
    }

    public int[][] getCampoIntDoubleArr2() {
        return campoIntDoubleArr2;
    }

    public void setCampoIntDoubleArr2(int[][] campoIntDoubleArr2) {
        this.campoIntDoubleArr2 = campoIntDoubleArr2;
    }

    public HashMap<String, int[]> getCampoHashMap1() {
        return campoHashMap1;
    }

    public void setCampoHashMap1(HashMap<String, int[]> campoHashMap1) {
        this.campoHashMap1 = campoHashMap1;
    }

    public String getCampo6() {
        return campo6;
    }

    public void setCampo6(String campo6) {
        this.campo6 = campo6;
    }
}
